package com.juli.school.service.impl;

import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.juli.school.dao.entity.Job;
import com.juli.school.dao.entity.Pub;
import com.juli.school.dao.mapper.JobMapper;
import com.juli.school.service.CommonService;
import com.juli.school.service.bo.JobBo;
import com.juli.school.service.enums.EnumModule;
import com.juli.school.service.utils.BeanUtils;
import com.juli.school.utils.core.model.CommonResp;
import com.juli.school.utils.core.model.ListResp;
import com.juli.school.utils.core.model.PageResp;
import com.juli.school.utils.log.annotation.DigestLog;

/**
 * @author wjp
 * @date 2017年10月3日
 *
 */
@Service
public class JobService implements CommonService<JobBo> {
	
	private static final Logger logger = LoggerFactory.getLogger(JobService.class);
	
	@Resource
	JobMapper jobMapper;
	
	@Resource
	PubService pubService;
	
	/**
	 * @Description: 新增校园兼职信息
	 * @author gaoxiang
	 * @date 2017年11月17日 下午2:51:40
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> add(JobBo jobBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			jobBo.setType(EnumModule.Job.code);
			// 先保存总的 发布信息表
			Pub pub = pubService.add(jobBo);
			BeanUtils.copyProperties(jobBo, pub);
			// 再保存详细校园兼职信息
			jobMapper.insert(jobBo);
			commonResp.setData(jobBo.getSnStamp());
			commonResp.success();
		} catch (Exception e) {
			logger.error("新增校园兼职信息异常", e);
			commonResp.exception("新增校园兼职信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 删除校园兼职信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:40:06
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> delete(String snStamp, String stuId) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			pubService.deleteBySnStamp(snStamp, stuId);
			jobMapper.deleteBySnStamp(snStamp);
			commonResp.success();
		} catch (Exception e) {
			logger.error("删除校园兼职信息异常", e);
			commonResp.exception("删除校园兼职信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 更新校园兼职发布信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:41:33
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> update(JobBo jobBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			jobBo.setType(EnumModule.Job.code);
			// 先更新总的 发布信息表
			Pub pub = pubService.update(jobBo);
			BeanUtils.copyProperties(jobBo, pub);
			// 再更新详细校园兼职信息
			jobMapper.update(jobBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("更新校园兼职信息异常", e);
			commonResp.exception("更新校园兼职信息异常 " + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 获取校园兼职详情
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:43:22
	 */
	@DigestLog
	public CommonResp<JobBo> detail(Pub req) {
		CommonResp<JobBo> commonResp = new CommonResp<JobBo>();
		try {
			req.setType(EnumModule.Job.code);
			// 先查询发布信息总表
			Pub detail = pubService.detail(req);
			JobBo jobBo = new JobBo();
			BeanUtils.copyProperties(jobBo , detail);
			// 如果有多余的字段，请查询详情表
			Job job = jobMapper.getBySnStamp(detail.getSnStamp());
			jobBo.setMailKind(job.getMailKind());
			jobBo.setBeginTime(job.getBeginTime());
			jobBo.setToTime(job.getToTime());
			jobBo.setJudge(job.getJudge());
			commonResp.setData(jobBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("获取发布信息详情发生异常", e);
			commonResp.exception("获取发布信息详情发生异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 分页查询失物信息
	 * @author gaoxiang
	 * @date 2017年8月25日 下午11:36:40
	 */
	public CommonResp<PageResp<Pub>> listPage(JobBo req) {
		req.setType(EnumModule.Job.code);
		return pubService.listPage(req);
	}
	
	public CommonResp<ListResp<Pub>> list(JobBo req) {
		req.setType(EnumModule.Job.code);
		return pubService.list(req);
	}
}
